<!DOCTYPE html>
<html lang="en-US">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <title>对象：{ } | 一只老鸟</title>
    <meta name="generator" content="VuePress 1.7.1">
    <link rel="icon" href="/img/rty-docs.ico">
    <script async="async" src="https://www.googletagmanager.com/gtag/js?id=UA-145250139-1"></script>
    <script>window.dataLayer = window.dataLayer || [];
      function gtag(){dataLayer.push(arguments);}
      gtag('js', new Date());
    
      gtag('config', 'UA-145250139-1');</script>
    <script>var _hmt = _hmt || [];
      (function() {
        var hm = document.createElement("script");
        hm.src = "https://hm.baidu.com/hm.js?96bef00c01d8ee7ee249abc380b9e5ab";
        var s = document.getElementsByTagName("script")[0]; 
        s.parentNode.insertBefore(hm, s);
      })();</script>
    <meta name="description" content="Welcome to my docs">
    <meta name="keywords" content="jkx,晋凯旋,jkxxmd,vue,js,html,css,英文歌曲,bruno">
    
    <link rel="preload" href="/assets/css/0.styles.eb327ba5.css" as="style"><link rel="preload" href="/assets/js/app.2b0e3d52.js" as="script"><link rel="preload" href="/assets/js/2.87232f21.js" as="script"><link rel="preload" href="/assets/js/47.e445b894.js" as="script"><link rel="prefetch" href="/assets/js/10.1e2b3af9.js"><link rel="prefetch" href="/assets/js/11.bfd5eea1.js"><link rel="prefetch" href="/assets/js/12.11b2a8d0.js"><link rel="prefetch" href="/assets/js/13.d230b1b6.js"><link rel="prefetch" href="/assets/js/14.8208356f.js"><link rel="prefetch" href="/assets/js/15.badc1e67.js"><link rel="prefetch" href="/assets/js/16.76e6aeba.js"><link rel="prefetch" href="/assets/js/17.ea4ddef2.js"><link rel="prefetch" href="/assets/js/18.e3d36bd1.js"><link rel="prefetch" href="/assets/js/19.aa1bac84.js"><link rel="prefetch" href="/assets/js/20.838765cd.js"><link rel="prefetch" href="/assets/js/21.14466225.js"><link rel="prefetch" href="/assets/js/22.38392bba.js"><link rel="prefetch" href="/assets/js/23.71895fbc.js"><link rel="prefetch" href="/assets/js/24.766c8a49.js"><link rel="prefetch" href="/assets/js/25.6b02ff9f.js"><link rel="prefetch" href="/assets/js/26.ef22337a.js"><link rel="prefetch" href="/assets/js/27.0334ed21.js"><link rel="prefetch" href="/assets/js/28.811fb438.js"><link rel="prefetch" href="/assets/js/29.f687b8ad.js"><link rel="prefetch" href="/assets/js/3.3fc78177.js"><link rel="prefetch" href="/assets/js/30.0eef1a68.js"><link rel="prefetch" href="/assets/js/31.44dad2fc.js"><link rel="prefetch" href="/assets/js/32.959ca33d.js"><link rel="prefetch" href="/assets/js/33.d27370cb.js"><link rel="prefetch" href="/assets/js/34.73319d5f.js"><link rel="prefetch" href="/assets/js/35.09513538.js"><link rel="prefetch" href="/assets/js/36.c77663c8.js"><link rel="prefetch" href="/assets/js/37.89852ede.js"><link rel="prefetch" href="/assets/js/38.a9026d97.js"><link rel="prefetch" href="/assets/js/39.2cb07eac.js"><link rel="prefetch" href="/assets/js/4.50419328.js"><link rel="prefetch" href="/assets/js/40.7694c8be.js"><link rel="prefetch" href="/assets/js/41.0b071795.js"><link rel="prefetch" href="/assets/js/42.731a77fd.js"><link rel="prefetch" href="/assets/js/43.e340c04a.js"><link rel="prefetch" href="/assets/js/44.32723933.js"><link rel="prefetch" href="/assets/js/45.fddbc294.js"><link rel="prefetch" href="/assets/js/46.7227ca9a.js"><link rel="prefetch" href="/assets/js/48.22f08eaa.js"><link rel="prefetch" href="/assets/js/49.1ee7be95.js"><link rel="prefetch" href="/assets/js/5.f4c7dd9b.js"><link rel="prefetch" href="/assets/js/50.620525ff.js"><link rel="prefetch" href="/assets/js/51.23ef9c37.js"><link rel="prefetch" href="/assets/js/52.ab599220.js"><link rel="prefetch" href="/assets/js/53.6f0a5a12.js"><link rel="prefetch" href="/assets/js/54.0af9ce80.js"><link rel="prefetch" href="/assets/js/55.9a619ce4.js"><link rel="prefetch" href="/assets/js/56.d3eb58e2.js"><link rel="prefetch" href="/assets/js/57.cec694aa.js"><link rel="prefetch" href="/assets/js/58.215ff512.js"><link rel="prefetch" href="/assets/js/59.67b4a2d9.js"><link rel="prefetch" href="/assets/js/6.35564b30.js"><link rel="prefetch" href="/assets/js/60.10fa328d.js"><link rel="prefetch" href="/assets/js/61.eb384a7b.js"><link rel="prefetch" href="/assets/js/62.21995735.js"><link rel="prefetch" href="/assets/js/63.d3376937.js"><link rel="prefetch" href="/assets/js/64.9dc17e46.js"><link rel="prefetch" href="/assets/js/65.faaf4be5.js"><link rel="prefetch" href="/assets/js/66.82d4fd2e.js"><link rel="prefetch" href="/assets/js/67.766e8bbb.js"><link rel="prefetch" href="/assets/js/68.e00a5e5f.js"><link rel="prefetch" href="/assets/js/69.0f9198d3.js"><link rel="prefetch" href="/assets/js/7.826495ef.js"><link rel="prefetch" href="/assets/js/70.05ef2cdd.js"><link rel="prefetch" href="/assets/js/71.0da0e95b.js"><link rel="prefetch" href="/assets/js/72.fd1cda42.js"><link rel="prefetch" href="/assets/js/73.907aa3c6.js"><link rel="prefetch" href="/assets/js/74.dec02a91.js"><link rel="prefetch" href="/assets/js/75.8610ce53.js"><link rel="prefetch" href="/assets/js/76.db9000c6.js"><link rel="prefetch" href="/assets/js/77.fa0311a2.js"><link rel="prefetch" href="/assets/js/78.33ae2bd0.js"><link rel="prefetch" href="/assets/js/79.879fa638.js"><link rel="prefetch" href="/assets/js/8.7a30ba0c.js"><link rel="prefetch" href="/assets/js/80.898b981f.js"><link rel="prefetch" href="/assets/js/81.b606e1f8.js"><link rel="prefetch" href="/assets/js/82.5006eb1e.js"><link rel="prefetch" href="/assets/js/83.604f41d2.js"><link rel="prefetch" href="/assets/js/84.2e649063.js"><link rel="prefetch" href="/assets/js/85.50f34442.js"><link rel="prefetch" href="/assets/js/86.aee7b865.js"><link rel="prefetch" href="/assets/js/87.9b812977.js"><link rel="prefetch" href="/assets/js/88.52e08a6c.js"><link rel="prefetch" href="/assets/js/9.7b6af510.js">
    <link rel="stylesheet" href="/assets/css/0.styles.eb327ba5.css">
  </head>
  <body>
    <div id="app" data-server-rendered="true"><div class="theme-container"><header class="navbar"><div class="sidebar-button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" viewBox="0 0 448 512" class="icon"><path fill="currentColor" d="M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"></path></svg></div> <a href="/" class="home-link router-link-active"><!----> <span class="site-name">一只老鸟</span></a> <div class="links"><div class="search-box"><input aria-label="Search" autocomplete="off" spellcheck="false" value=""> <!----></div> <nav class="nav-links can-hide"><div class="nav-item"><a href="/" class="nav-link">
  主页
</a></div><div class="nav-item"><a href="/components/introduction.html" class="nav-link">
  VUE
</a></div><div class="nav-item"><a href="/english/introduction.html" class="nav-link">
  Javascript
</a></div><div class="nav-item"><a href="/music/introduction.html" class="nav-link">
  Html5
</a></div><div class="nav-item"><a href="/oral/introduction.html" class="nav-link">
  CSS
</a></div> <a href="https://github.com/jgsrty/jgsrty.github.docs" target="_blank" rel="noopener noreferrer" class="repo-link">
    GitHub
    <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></nav></div></header> <div class="sidebar-mask"></div> <aside class="sidebar"><nav class="nav-links"><div class="nav-item"><a href="/" class="nav-link">
  主页
</a></div><div class="nav-item"><a href="/components/introduction.html" class="nav-link">
  VUE
</a></div><div class="nav-item"><a href="/english/introduction.html" class="nav-link">
  Javascript
</a></div><div class="nav-item"><a href="/music/introduction.html" class="nav-link">
  Html5
</a></div><div class="nav-item"><a href="/oral/introduction.html" class="nav-link">
  CSS
</a></div> <a href="https://github.com/jgsrty/jgsrty.github.docs" target="_blank" rel="noopener noreferrer" class="repo-link">
    GitHub
    <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></nav>  <ul class="sidebar-links"><li><a href="/english/introduction.html" class="sidebar-link">导读</a></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading open"><span>2019十二月(December)</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/english/2019/2019-December/What Is a Calorie.html" class="active sidebar-link">对象：{ }</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/english/2019/2019-December/What Is a Calorie.html#对象" class="sidebar-link">对象：{ }</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/english/2019/2019-December/What Is a Calorie.html#给对象添加属性" class="sidebar-link">给对象添加属性：</a></li><li class="sidebar-sub-header"><a href="/english/2019/2019-December/What Is a Calorie.html#对象的操作" class="sidebar-link">对象的操作：</a></li><li class="sidebar-sub-header"><a href="/english/2019/2019-December/What Is a Calorie.html#遍历对象" class="sidebar-link">遍历对象</a></li><li class="sidebar-sub-header"><a href="/english/2019/2019-December/What Is a Calorie.html#堆内存和栈内存" class="sidebar-link">堆内存和栈内存：</a></li></ul></li><li class="sidebar-sub-header"><a href="/english/2019/2019-December/What Is a Calorie.html#什么是数组" class="sidebar-link">什么是数组：</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/english/2019/2019-December/What Is a Calorie.html#创建数组方法-·-q" class="sidebar-link">创建数组方法 · Q</a></li><li class="sidebar-sub-header"><a href="/english/2019/2019-December/What Is a Calorie.html#数组方法" class="sidebar-link">数组方法</a></li></ul></li><li class="sidebar-sub-header"><a href="/english/2019/2019-December/What Is a Calorie.html#冒泡排序" class="sidebar-link">冒泡排序：</a></li><li class="sidebar-sub-header"><a href="/english/2019/2019-December/What Is a Calorie.html#字符串的方法-下标" class="sidebar-link">字符串的方法： 下标</a></li><li class="sidebar-sub-header"><a href="/english/2019/2019-December/What Is a Calorie.html#正则匹配-match" class="sidebar-link">正则匹配：Match / [ ] /</a></li><li class="sidebar-sub-header"><a href="/english/2019/2019-December/What Is a Calorie.html#内置对象" class="sidebar-link">内置对象：</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/english/2019/2019-December/What Is a Calorie.html#_1、math" class="sidebar-link">1、Math ：</a></li><li class="sidebar-sub-header"><a href="/english/2019/2019-December/What Is a Calorie.html#_2、date" class="sidebar-link">2、Date ：</a></li><li class="sidebar-sub-header"><a href="/english/2019/2019-December/What Is a Calorie.html#函数" class="sidebar-link">函数：</a></li></ul></li><li class="sidebar-sub-header"><a href="/english/2019/2019-December/What Is a Calorie.html#对象、数组、函数联系" class="sidebar-link">对象、数组、函数联系：</a></li></ul></li><li><a href="/english/2019/2019-December/Why Is Water so Important.html" class="sidebar-link">水为何如此重要</a></li></ul></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>2019十一月(November)</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>2019十月(October)</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>2019九月(September)</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>2019八月(August)</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>2019七月(July)</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>2019六月(June)</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>2019年五月(May)</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>2019年四月(April)</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>2019年三月(March)</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>2019年二月(Feburary)</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>2019年一月(January)</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>2018年十二月(December)</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>2018年十一月(November)</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>2018年十月(October)</span> <span class="arrow right"></span></p> <!----></section></li></ul> </aside> <main class="page"> <div class="theme-default-content content__default"><h2 id="对象"><a href="#对象" class="header-anchor">#</a> 对象：{ }</h2> <p>1、内置对象(本身就有的 在有ES(ECMAscript)标准中定义的对象 在任何 js实现中都
可以使用 )
——Number，String，Math，is NaN，Boolean
2、宿主对象 或 浏览器 对象（有js运行环境提供的对象，目前指浏览器提
供的对象）：
——DOM BOM，document.write（），alert（），
3、自定义对象（由开发人员自己创建的对象）：
——
4、一般的对象都有自己的length,长度也是个数。 length不是索引项 索引项是从0开始
length是从1开始；
对象定义：
对象是复合型数据类型，在对象中可以保存多个不同类型的数据类型。
对象是有属性和方法的数据
document.write()
document是对象， write是document的属性，
document.write（）就是document对象的方法。
var obj = { };
obj.name 对象的属性
obj.age( ) 对象属性的方法
对象可以包含对象
当基本数据类型进行对比时，对比的是值，只要值相等就相等
{ }就是引用数据类型 当引用数据数据类型进行比较的是栈内存地址（堆
内存中对象在栈内存中的地址），即使对象的属性和属性值都一样，如果他们
的内存地址不一样，结果就是不相等。
如何创建对象？
属性就是一个字符串 特殊符号($%##@)和特殊字体要改成字符串 “
”
输出的时候得用【】包着 console.log(对象【“$%###”】)也可以对象【“属性”】
来输出属性值
new创建对象
如果想创建对象是通过 new 操作符 new Object()；创建出来对象字面量 { }，这个{}就
是对象的字面量
记得大小写</p> <h3 id="给对象添加属性"><a href="#给对象添加属性" class="header-anchor">#</a> 给对象添加属性：</h3> <p>1、语法：对象.属性=属性值 对象的属性。
var _____= new Object（）; 使用new 关键字调用的函数叫做构造函数（constructor）。
（构造函数
创建对象） 缺点： 得单独添加属性 构造函数是专门用来创建对象的函数。
2、对象字面量创建对象
var _____= { } ; 使用对象字面量创造的对象 （对象字面量创建对象）
3、还可以var ___={属性：属性值，属性：属性值，属性：属性值}
最后一个对象：属性 不添
加 ，</p> <h3 id="对象的操作"><a href="#对象的操作" class="header-anchor">#</a> 对象的操作：</h3> <p>添加属性 在创建时直接添加，跟之前声明时的在同样的地方。
修改属性 直接在下面写修改后的属性即可。
对象.属性=新的属性
删除属性 delete 对象.属性 即可。
delete 对象.属性
输出可以用document.write(对象.属性+对象.属性)输出来
检查一个属性是否在对象中
语法 ： “属性” in 对象 true是在对象中，false是不在对象中。 记得属性要加 “
” console.log（&quot;属性&quot; in 对象）； 。</p> <h3 id="遍历对象"><a href="#遍历对象" class="header-anchor">#</a> 遍历对象</h3> <p>想要输出对象中的全部属性 先var 一个变量。
for in 遍历对象 输出是用对象【变量】
var x;
for(x in 对象名称){
console.log(对象名称【x】);
}
输出对象的全部属性
输出X 只出来属性，
获取对象属性
var XXX={ a:1,b:2 } Object.keys(XXX)返回的是XXX属性名的一个集合 [a,b]
Object.values(XXX)返回的是XXX属性值的一个集合 [1,2]</p> <h3 id="堆内存和栈内存"><a href="#堆内存和栈内存" class="header-anchor">#</a> 堆内存和栈内存：</h3> <p>js变量是保存在栈内存中的，基本数据类型也是保存在栈中。栈中的值与值之间是独立存在
的，改变一个变量的值，其他不受影响。加入栈中的变量是从下到上添加的，调取是从上往下
调用。
对象是保存在堆内存中，创建一个新对象，在堆内存中就会有一个新空间放对象，栈内存中的
变量对应的值是对象的内存地址（对象的引用）。
如果一个对象保存的是另一个对象的引用（xxx=xxx）当通过变量修改属性时另一个对象也会跟
着改变。
基本数据类型放在栈内存中 引用数据类型（{ }就是引用数据类型）
放在堆内存</p> <h4 id="栈内存和堆内存的区别"><a href="#栈内存和堆内存的区别" class="header-anchor">#</a> 栈内存和堆内存的区别：</h4> <p>栈内存 存在的是变量和基本数据类型， 对象的内存地址（就是值）。
堆内存 存在的是对象，</p> <h4 id="深拷贝和浅拷贝"><a href="#深拷贝和浅拷贝" class="header-anchor">#</a> 深拷贝和浅拷贝：</h4> <p>深拷贝： 当一个对象保存的是另一个对象的引用时，对新的对象进行修改，改变属性值，原对象不改变。
浅拷贝： 当一个对象保存的是另一个对象的引用时，例如（object=object1），改变新对象 ，原对象也
跟着变化。
深拷贝 ：把引用数据类型变成值类型 添加到新数组或新对象中。
浅拷贝：相等的时引用地址 改变 一个全都改变了</p> <h2 id="什么是数组"><a href="#什么是数组" class="header-anchor">#</a> 什么是数组：</h2> <p>数组也是对象，它与普通对象类似，都是用来存储值的，不同的是对象的属性
是字符串，数组是通过数字索引来进行定义的。【0】······整数来进
行定义的。
数组比普通对象存储性能要好，开发中经常使用数组来存储数据类型，
数组里面可以存放所有的基本数据类型。也可以放对象，对象里面也可以放数
组。
数组： array [ ]
与创建对象不同的是可以直接添加属性，而对象只能通过对象.属性添加。
length数组的长度
数组就是一组数据的集合【1,2,3,4,5】
数组中的每一项都有对应的顺序，每一项都有对应的下标。
var arr = new Array()
arr（变量名）[0]指的是数组第一项，
arr（变量名）[1]指的是数组第二项，
输出数组每一项arr【0】</p> <h3 id="创建数组方法-·-q"><a href="#创建数组方法-·-q" class="header-anchor">#</a> 创建数组方法 · Q</h3> <p>1、构造函数创建 4、 arr = new
Array(1,2,3,4,5）
var arr = new Array();
arr[0] = ___;
arr[2] = ___;
2、数组字面量创建
var arr = [ ] ;
arr[0] = <strong><em>;
arr[2] = <em><strong>;
3、字面量直接加属性；
var arr = [1,2,3,4,5,6]
数组.length是数组长度，同时也是数组个数，如果想遍历数组每一项，数组.length可以做为
循环的范围。
可以单独在下面添加数组的每一项arr[0];
数组索引[0],[1],[2],[3]......从0开始的整数：
从0开始0是第一项
1是第二项
2是第三项
........
如果不设置从0开始，空缺的项是 empty 如果查看空缺
项，返回 undefined.
当数组是连续数组时索引值（0开始的整数）获取并返回数组索引项的个数，
当不是连续的数组时，length获取到的最大索引项+1。
修改length arr.length=</strong>;
当length大于原数组长度，多出来部分就会空出来，返回空项的值是
undefined.
当length小于原数组长度，会把多余的项删除。
二维数组：
数组套数组就是二维数组，套三个就是三维数组，
var arr =【【1,2,3,4,5】，【7,8,9,10】，【33,44,55,66】】
还可以套对象{ }
var arr = [{name:</em></em>},{age:</strong>},[ ] ]
数组方法： 数组中的下标从0开始
index索引也叫下标
Array.isArray(数组) 判断是不是数组。
数组.reduce（function(prev（必须）, cur（必须）, index（可选）, arr（可选）){
} ，initialValue（初始值） ）
1、previousValue （上一次调用回调返回的值，或者是提供initialValue初始值
2、currentValue （数组中要被处理的每一个元素）
3、index （当前元素在数组中的索引）
4、array （调用 reduce 的数组）
数组求和. 回调函数里面 a是每次求和的结果 b 是求和之前的初始值。
数组里面 初始值 默认为0 字符串 默认&quot; &quot; 空字符串。
数组.filter 过滤
arr.filter(function(item){
return item!=3;
}</p> <h3 id="数组方法"><a href="#数组方法" class="header-anchor">#</a> 数组方法</h3> <p>1、在前面/后面添加数组项：
数组.push(__); 从后面添加数组 数字直接写数字 字符串 要加 “
” 。
conosle.log（arr.push()）将新数组的个数作为返回值返回。
改变原数组。
数组.unshift( ); 从前面添加一个或多个数组项，并将新数组的个数返回回来
改变原数组
2、在前面/后面删除数组项：
数组.pop( ) 删除最后的一个数组项，并将删除完之后的数组长度。会减少数组
的长度（一共有5项，删除最后一个还有4个值，项数4个）
会改变数组
数组.shift( ) 删除第一个数字项，并将删除完之后的新数组项回回来。
会减少数组的长度 。
会改变数组
3、合并数组/在后面添加元素：
数组.concat( ) 合并数组/添加元素 。
语法1、数组.concat(新元素 属性和属性值) 在后面添加元素。
不改变原数组
语法2、数组1.concat（数组2）合并数组。
不改变原数组
当数组里面是基本数据类型时，通过concat可以实现数组的深拷贝。
console.log（数组1.concat（数组2）） 输出合并的新数组。
语法3、数组1.concat(数组2，数组3)
4、截取元素也可以复制数组：
数组.slice( )可以从数组中提取指定元素，不会改变原数组，而是将截取的元素封装到
一个新数组返回。
数组.slice( 开始索引项,结束索引项 ) 不是从0开始的项数 是【x】里面的
数组
是从开始索引项开始截取，包含开始索引项。
slice
截取位置结束索引，不包含结束索引。
结束索引项可以省略不写，此时就截取从开始索引到结束的索引。
索引可以传一个负值 -1就是最后一项，-2就是倒数第二项。倒着截取要注意
（-2，-1）
负值形式查找不适合ie8及以下版本
5、从中间删除数组项也可以添加数组项： 改变原数组
数组.splice(x,x,x ) 可以删除数组中的元素，并向数组中添加新的元素。
使用splice会影响原数组，会将数组元素从原数组删除，并将删除的元素作为值返回。
参数的 第一个值是从第几个索引开始删除。 arr[ x] splice(x,1) 就是删除X
第二个值是删除的个数 包含开始删除索引。
第三个值是可以在原数组删除位置添加新的元素。
6、数组去重：
1、纯数字去重 用for循环嵌套splice删除重复的：2个for循环嵌套，外循环索引从0
开始，内循环索引从外循环索引+1开始。然后外循环和内循环进行判断，当有相等的值时用
splice删除内循环中的索引，考虑到可能有连续重复的数字，需要在删除之后，对内循环的索
引进行--回到原来的位置重新判断一次，最后再输出。
2、数组.indexOF( ) 查询 新数组.indexOF（下标）== -1；证明新数组没有这个数
然后新数组.push添加进去；
7、数组排序：
数组.sort（）对数组中的元素进行排序，会影响原数组，默认按照unicode编码排序。
1、如果数组中元素都是个位数字，就按正常大小顺序来排序，
2、如果有两位数及两位数以上的数字时，先比较第一个数字然后排序，（12，16，23 ，
2356，356，47896 ）；
3、如果两位数及两位以上的数字，并且是同位的数字时先比较第一个数字再比较第二个数
字再排序。
如果是字母：“a”,&quot;b&quot;,&quot;c&quot;这些事按照26位英文字母排序的，
若是多个字母的单词也是按照先比较第一个排序，在比较第二个排序......
字母有大小写的话先大写排序，后小写排序。
归总：先比较第一个数字排序，再比较第二个数字排序，再比较第三个数字排序.....。
对于纯数字的数组进行排序会使用unicode编码排序，会返回错误的结果（如
1,12,15,2，21,26,3）
除了数字之外的 字母、数字、特殊符号都是按照unicode编码编号来排的。</p> <h2 id="冒泡排序"><a href="#冒泡排序" class="header-anchor">#</a> 冒泡排序：</h2> <p>就是通过循环 0的时候，索引0和索引1的比，var 个变量给这两个值大的数，（例如
a=4,b=2,a&gt;b;var c=a=4,a=b=2,b=c=4;）一轮之后两侧就是最大和最小的值，然后因为循环 索引1
开始和索引2对 比此时数组中索引第二项和倒数第二项是数组中第二大，第二小的数，依次进行下去。
让数组当中相邻的两个数进行比较，数组当中比较小的数值向下沉，数值比较大的向上浮！外层for
循环控制循环次数，内层for循环控制相邻的两个元素进行比较。</p> <ol><li>比较相邻的元素。如果第一个比第二个大，就交换他们两个。</li> <li>对每一对相邻元素做同样的工作，从开始第一对到结尾的最后一对。在这一点，最后的
元素uj应该会是最大的数。</li> <li>针对所有的元素重复以上的步骤，除了最后一个。</li> <li>持续每次对越来越少的元素重复上面的步骤，直到没有任何一对数字需要比较。
var arr = [1,56,123,34,2,114,23];
数组每一项进行对比
for(a=1;a&lt;arr.length;a++){
for(j=0;j&lt;arr.length-a;j++){
if(arr[ j ]&gt;arr[ j+1 ]){
var b = arr[ j ];
arr[a]=arr[ j+1];
arr[1+j ]=b;
}
}
}
console.log(arr);
数组.sort 结合回调函数 进行数字大小的排序：
组.sort( function(a,b) {
例如console.log（a+b）
} )
arr[1,2,3,4]
console.log( arr.sort( ) ); 3,5,7 [1,2,3,4]
数组中有几个元素函数就会执行几次，每次执行函数时，浏览器会把遍历到的元素以实参的
形式传递进来，通过定义形参然后接收这些实参。
a-b 大于0 不换位置
a-b 小于0 会换位置；
a-b 等于0 说明相等；
升序排列： 返回 return a-b;
降序排列： 返回 return b-a;
var arr = [60,70,80,66,78,90,30,20,60]; a是从
索引值为1的项开始；
arr.sort(function(a,b){ b
是从索引值为0的项开始；
if(a&gt;b){
return 1;
}else if(a&lt;b){
return -1;
}else if(a==b){
return 0;
}
})
console.log(arr)
数组.reverse( )反向排列数组
数组.forEach( ) 也是循环
forEach() 方法用于调用数组的每个元素，并将元素传递给回调函数。
注意: forEach() 对于空数组是不会执行回调函数的。
兼容性 只支持ie9及以上的浏览器。 如果要兼容ie8及以下版本的浏览器，
使用for循环就行。
如果不需要兼容ie的也可以使用，例如移动端。
【...类数组】.function
回调函数由我们创建的但是不由我们调用成为回调函数。
回调函数就是传递一个参数化的函数，就是将这个函数作为一个参数传到另一个主函数里面，当那一
个主函数执行完之后，再执行传进去的作为参数的函数。走这个过程的参数化的函数 就叫做回调函数。换个
说法也就是被作为参数传递到另一个函数（主函数）的那个函数就叫做 回调函数。
回调函数具体的定义为：函数A作为参数(函数引用)传递到另一个函数B中，并且这个函数B执行函数
A。我们就说函数A叫做回调函数。如果没有名称(函数表达式)，就叫做匿名回调函数。
语法 数组.forEach( function( a,b,c ) { } )。
第一个参数是返回数组中的项； console.log（a）;
第二个参数是返回数组的索引； console.log（b）;
第三个参数是返回整个数组 console.log（c）;
c[b]=a+1; 数组每一项加一
数组.some(function(item,index,数组){ if...}) 有一些是返回true
数组.every(function(item.index,数组){ if...}) 全是才是true
8、把数组变成字符串：
1、数组.join（“ ”）; 必须有引号。
将数组的每一项元素通过符号进行连接，合并成字符串；
中间不放连接符就直接是一串数字。 “ ”中可以放符号当做连接符 不改变原
数组
2、数组.toString( )；不需要引号。
只不过不能用符号连接，默认就是逗号连接。
9、把字符串分割成数组：
字符串.split（）；将字符串分割成数组
var a = &quot;奥术大师大所大所大所大所大所多&quot;
a.split(&quot;大&quot;)
可以根据字符串中的某个字符分割，(字符串.split(&quot;m&quot;) aamaamaa [ aa,aa,aa]
) 该字符就被逗号代替了。
不根据字符分割直接写 字符串.split( ),分割后每一个元素是一项。 不改变原字
符
10、查询数组中的项：
数组.indexOf( value(值),stay(开始) )查询数组中的项，返回其索引；
参数：inedxOf(要找的元素，从哪开始找); 从左到右的顺序
第一个是要找的项。 搜索的子字符串。
第二个是从哪个项开始找， 开始搜索的索引位置，第一个字符是 0 ，第二个是
1 ，以此类推。
若查询的项数负数则从它前面开始查看
找到了 返回其下标 （索引项） 若没有该数 则返回-1
数组.lastIndexOf（ value(值),stay(开始) ） 从右到左的顺序
数组.lastIndexOf()方法虽然是从后往前搜索，但返回的位置是从前开始数数
和计算的
数组.indexOf（）去重，原理是首先新建一个空的数组，然后建一个循环 条件
小于
原数组.length,用来遍历原数组，再判断新数组.indexOf（原数组【下标】）==-1；
（就是新数组没有的 这个数） 再新数组.push(原数是组【下标】)；即可 ie8
一下不兼容。
var arr = [2,2,3,5,2,4,3,2,5];
var arr2 = [ ];
for(x=0;x&lt;arr.length;x++){
if(arr2.indexOf(arr[x])==-1){
arr2.push(arr[x]);
}
}
console.log(arr2);
对象分类：
自定义对象；
内置对象；js中本身自带的
宿主对象；alert( ) document.write( )</li></ol> <h2 id="字符串的方法-下标"><a href="#字符串的方法-下标" class="header-anchor">#</a> 字符串的方法： 下标</h2> <p>也是从0开始的。从左到右的顺序。
var a =2 a.toFixed(2) 输出2.00
___.toFixed(想保留几位小数点) 按照四舍五入保留几位小数点 99.00
字符串的长度： 字符串.length;
字符串.substr(startIndex,n) 截取字符串从索引为startIndex的截取n
个数包括开始startIndex
字符串.sunstring(startIndex,lastindex) 截取字符串索引startIndex-lastindex 不包括结
束,lastindex
不改变原数组
字符串.slice( ）字符串截取：
第一个参数，开始索引，包括开始索引；
第二个参数，结束索引，不包括结束索引；
不改变原数组
负值形式查找不适合ie8及以下版本
字符串.split( ) 字符串分割：
字符串.split（&quot;&quot;）字符串中的每个字符都是数组中的一项，用逗号隔开;
以字符串中的字符分割 字符串.split(&quot;l&quot;)，字符串中的所有 l 变成空字符串
（''''）每项用逗号隔开。
字符串.indexOf( ) 查找字符串中的某项， 返回其索引值； 从左往右查看，一旦查找到就不
继续，直接返
回来， 后面重复的不管。
字符串.lastIndexOf( ) 查找字符串中的某项，返回其索引值 从右往左查
询，一旦查找到就不继续，直
接返回来，后面重复的不管。
字符串.charAt( 索引值 ) 返回指定位置的字符：
返回 索引值 所对应在 字符串中 的 字符。 字符串.charAt(4)
返回索引值为4的字符。
字符串.charCodeAt( 索引项 )：
返回指定位置字符的unicode编码。
字符串.concat(新字符串)：合并字符串（不能添加）；、
字符串.toLocaleLowerCase( ): 将字符串中的大写变成小写。
字符串.toLowerCase( );
字符串.toLocaleUpperCase( ): 将字符串中的小写变成大写。
字符串.toUpperCase( );
字符串.trim( ): 删除字符串两边的空格 ie8及
以下不兼容
字符串.search( 字符串2或者要查找的字符 ); 检索与字符串匹配的字串返回其位置
空格也算一个字符！
1、若原字符没有要查询的返回 -1。
2、找到一个就不继续往下找了。
3、位置是从第一个匹配到字符所在位置的索引值。要是查询的是一连串的字符串，原字
符中必须有一段
完全匹配才行，否则就是查询不到返回-1。
字符串.replace(/（\d{3}）/g，&quot;$1&quot; ):
第一个参数是要替换项；
第二个参数是替换成什么元素；
替换所有的符合的项
字符串.substring（） 方法返回字符串的子字符串。
substring(int beginIndex, int endIndex)
beginIndex -- 起始索引（包括）, 索引从 0 开始。
endIndex -- 结束索引（不包括）。
字符串.substring（0,1）返回第一个子字符串
字符串.substring（0,1）+&quot;...&quot;返回第一个子字符串，后面的在拼串
字符串中可以结合正则使用的方法：
字符串.search( )：
即使结合正则表达式去检索，依旧找到第一个就不继续了，并将找到的索引 返回。即使
结合正则匹配全局模式也是只查找一个。
字符串.match( )：
在字符串中检索指定的值，可以结果一个或多个正则表达式进行匹配，返回结果的值;
默认是查找到第一个匹配项就返回结果的值；要都选结合正则的全局模式
返回的类型是object;
即使返回只有一项也是放到数组中的；
返回的是数组
字符串.split( )：
截取字符串，将截取的字符用 ，代替；可以结合正则截取多个范围或者多个字符。返
回的是数组。
字符串.split(/[a-z]/);
字符串.replace( ):
替换匹配的字符串； replace结合正则表达式替换
字符串.replace(/[a-z]/,&quot;xx&quot;); 将所有a-z的字符替换成xx
返回替换后的数组</p> <h2 id="正则匹配-match"><a href="#正则匹配-match" class="header-anchor">#</a> 正则匹配：Match / [ ] /</h2> <p>正则表达式：/xy/ 只查询 xx（当做一个字符） 类型得
/【xy】/ 查询每一个 x,y
表达式：需要匹配的规则；
修饰符：g 全局匹配；m 多行匹配 i 不区分大小写
[^y] ^ 取反 在【】里是取反 在外面是开始
字符串方法.replace(正则匹配，&quot;替换成什么&quot;)
/^[abc]/ 以里面的开始的 a,b,c可以设置替换成什么
$ 结尾 x$以x结束。
| 或
（） 匹配的子集；
元字符：
\s空白(空格) \S非空白
\d数字 \D 非数字
\w字母和数字 \W非字母和数字
\n 换行
.除了\n和 $以外的任意字符
正则表达式方法：/ /.test（str) 检测有没有匹配规则的字符串，返回true或false
数量 .*？ 匹配任意不是换行和结束的字符。
replace(/\s/g,&quot;&quot;) 去空格</p> <ul><li>重复1到多次 例如 5+ 匹配12315、231555都行</li></ul> <ul><li>0次到多次 有也能 匹配 没有也能匹配
？ 0到一次
{n} n次
{n,m} n-m次
var rel=/&lt;[ ^ &gt; ].<em>?&gt;/g 然后通过替换来改变 将html标签 改成字符
/&lt;img[^&gt;].</em>?&gt;/g
var xxx=new RegExp(&quot; &quot;,&quot; &quot;) 新建正则表达式对象
在里面的\s \d 什么的 要用 \s
[ ] 一个集合 /[a-z]/ 查找字符串中没
有返回 0
/ / 表达式 /ab/ 就只查
询/ / 中的元素， 查找字符串中没有 返回-1
默认的： 匹配到一
项就停止了，要想匹配多项 后面加 g
全局模式： / [ ] /g 后面加个 g 即
可。 global全球的
忽略大小写 / [ ] / i 后面加个 i 即
可； ignore忽视；
例如匹配 a-z的字母 / [a-z] / 匹配大写的A到小写的z
/[A-z]/
也可以这样写 / a [a-z] c / 匹配a_z的
/[ab]/ 只匹配a,b的 出来 &quot;a&quot;,&quot;b&quot; ;
/[a-z]/a-z 所有的都输出&quot;a&quot;,&quot;b&quot;,&quot;c&quot;.....,&quot;z&quot;;
/a[a-z]c/ a__c 的字符 &quot;aac&quot;,&quot;abc&quot;,&quot;acc&quot;,&quot;adc&quot;</li></ul> <h2 id="内置对象"><a href="#内置对象" class="header-anchor">#</a> 内置对象：</h2> <h3 id="_1、math"><a href="#_1、math" class="header-anchor">#</a> 1、Math ：</h3> <p>.E 科学计数法
.PI 3.1415926535
.abs 绝对值 将负数变成正数
.ceil 数字向上取整（无论小数点后值多少都会向上取整 0.222-&gt; 1
1.22-&gt; 2 ）如果是负数也是向上取整（ -0.001-&gt;0 -1.1245-&gt; -1）4
.floor 数字向下取整（无论小数点后值多少都会向下取整 0.922-&gt; 0
1.52-&gt; 1 ）如果是负数也是向下取整（ -0.001-&gt; -1 -1.1245-&gt; -2）
不是Math里面的 parseInt( ) 去掉小说点。
.max 取一组数中最大的并返回 Math.min.apply(null,arr)
Math.max.apply(Math,arr数组); 改变this指向
.min 取一组数中最小的并返回 将其他类型转化为Number。
.round 取整 四舍五入
.random 随机数 8出任意0-1之间的数，有小数点。
要是随机1-10的数 10*Math.random( );
1以上的数 Math.ceil( Math.random );
如果只要整数0~...的话 Math.floor( Math.random( ) )
最小值--最大值之间循环 Math.floor(Math.random() * (max -
min)) + min;
.sqrt[sqrt] 就是开方 4开方=2 数学中的根号 J``````
.pow 就是平方 Math.pow(8,2) 返回64</p> <h3 id="_2、date"><a href="#_2、date" class="header-anchor">#</a> 2、Date ：</h3> <p>var <strong>= new Date( );
Date( ) 获取当前地区的年，月，日，时，分，秒，星期几。
.getFullYear( ) 获取当前年份。
.getMonth( ) 获取月份 （0-11）所以用月
份需要 +1。0值得是12月
设置的具体时间（'2019/11/15 12:0:0'）不用+1
一月January 二月February
三月March
四月April 五月May
六月June
七月July 八月August
九月September
十月October 十一月November 十二
月December
.getDate( ) 获取当前的日期的几号 （1-31）
.getDay（） 获取当前星期几 （结果是数字） （0~6）0值
得是周日
星期一 Monday 星期二 Tuesday
星期三 Wednesday 星期四 Thursday
星期五 Friday 星期六 Saturday
星期日 Sunday
.getHours( ) 获取当前 小时
（0~23）
.getMinutes( ) 获取当前小时的 几分 （0~59）
.getSeconds( ) 获取到当前的 几秒 （0~59）
.getTime( ) 1970年1月1日至今的毫秒数ms 无限大
.setDate( ) 设置Date中日期的 几号
.setHours( ) 设置Date中 小时
.setMinutes( ) 设置Date中 几分
get</strong>_ 获取 set__改变。
toDateString() 吧Date对象日期转化为字符串
.varlueOf()返回其的原始值 毫秒数</p> <h3 id="函数"><a href="#函数" class="header-anchor">#</a> 函数：</h3> <p>1、什么是函数：
函数是一个对象。
函数可以封装一些功能（代码），需要时可以执行这些代码。 function功
能的意思
封装好的函数必须调用才执行，不调用不执行。
如果typeof 创建之后的 function，返回结果就是function。
创建函数的方式 :
1、构造函数创建： var fun = new Function( );
2、函数字面量创建： function ___(起个函数名)（ ）{ }。
3、函数表达式的方式 var fun1 = function( ）{ }； fun1( )。
函数创建完之后并不能直接执行，需要调用才能执行函数。function ___( ){ } __( )这
个是调用
带参数的函数：
小括号中可以直接写参数（形参），不需要变量声明，参数本身就是一个变量。
形参对应的值通过调用函数中传入的实参（具体数值）
函数参数：
如果函数在调用时缺少参数，参数会默认设置为： undefined
我们可以将变量放在小括号中，作为形参（形式参数，相当于变量，只是不需要声明。
相当于在函数体中var 变量；只是没有值）
在调用函数时传入实参（实际参数，形参对应的 可以使任何数据类型。
在函数中实参可以传对象
调用函数时，解析器不会判断实参个数，多余的实参不会被赋值， 如果实参个数比形
参个数少，形参没有对应的实参，形参返回的结果是 undefined。
形参语法：function 函数名（形参1，形参2，形参3....）{
}
实参语法： 函数名（ ）
function sum (a,b...){
conosle.log(a+b...);
}
sum(数值，数值...) . 再需要输出就直接在下面直接写 sum( 数值，数值...)
函数的返回值：
return 函数返回值
可以将函数体中需要的值返回。可以不再函数体内直接写输出。
可以在函数体外 var 新变量=调用函数输出。
语法：return 值；
直接return；后面没有值 返回undefined;
return 值；下面的任何代码都不执行；跟break差不多效果。
函数内可以再放函数：
return返回的类型可以使任何数据类型，可以是基本数据类型，也可以是引用数据类型，也
可以是一个函数。
匿名函数或者立即执行函数（自调用函数）：
只能执行一次。
语法：（ function（）{要输出的内容} ） （）用小括
号把没函数名称的函数括起来，然后后
面再加小括号调用。
函数.call和函数.apply是函数的方法
是函数的方法，需要通过函数来调用；
当函数调用 数组.call（）和 数组.apply（）都会调用函数执行；
call和apply第一个参数是一样的，该参数将替代Function类里面的this对象
函数.call和函数.apply可以改变函数中的this指向；
在调用call和apply时可以将一个对象作为第一个参数，后面可以加实参，但是apply加
实参的时候必须用
数组传实参 [ ]。 所传的对象就是this的指向。
函数.call和函数.apply的区别
apply()的第一个参数是null，在非严格模式下，第一个参数为null或者undefined时会自动替换为指
向全局对象，apply()的第二个参数为数组或类数组。
function(a,b,c){}
call（1,2,3） 输出 a=2 b=3 c=undefined
call(obj 1,2,3 ) 输出a=1 b=2 c=3;
函数.call( )方法可以将实参放到对象后面依次传递 注意函数形
参也要写 改变this指向
call(null,2,3,34,1,12,3) obj就是一个对象
函数.apply( )方法 需要将实参封装到数组中统一传递；
apply(null,[1,......]), 即使是一个实参也要用 [ ]
call apply 立即执行
Object.prototype.toString.call( Array)=[object Array];
fn.call(obj)---把fn给obj使用 立即执行obj.fn()
函数.bind( )方法 改变this指向 不是立即执行。调用时才执行。
会生成一个新的函数。
var h=函数.bind(obj)现在改变了this指向 然后调用h() 才执行 参数 跟call
一样 是，，，，</p> <h2 id="对象、数组、函数联系"><a href="#对象、数组、函数联系" class="header-anchor">#</a> 对象、数组、函数联系：</h2> <p>创建对象的方法：
1、构造函数创建: var obj = new Object。
2、字面量创建： var obj = { }。
3、字面量加属性创建： var obj = {属性：属性值，属性：属性值}。
创建数组的方法：
1、构造函数创建: var arr = new Array。
2、字面量创建： var arr = { }。
3、字面量加属性创建： var arr = {属性：属性值，属性：属性值}。
创建函数的方法：
1、构造函数创建: var fun = new Function。
2、字面量创建： function __(起个名字)（ ）{ 代码体 }。
3、自运行函数 一次性的 (function( ){ }( )）不同起名字的函数 外面用小括号包
起来，只执行一次。
全局作用域：
在js中作用域： 一个变量作用的范围
1、全局作用域（整个 <script></script></p></div> <footer class="page-edit"><div class="edit-link"><a href="https://github.com/jgsrty/jgsrty.github.docs/edit/master/docs/english/2019/2019-December/What Is a Calorie.md" target="_blank" rel="noopener noreferrer">Edit this page</a> <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></div> <div class="last-updated"><span class="prefix">Last Updated:</span> <span class="time">12/23/2020, 4:59:13 PM</span></div></footer> <div class="page-nav"><p class="inner"><span class="prev">
      ←
      <a href="/english/introduction.html" class="prev">
        导读
      </a></span> <span class="next"><a href="/english/2019/2019-December/Why Is Water so Important.html">
        水为何如此重要
      </a>
      →
    </span></p></div> </main></div><div class="global-ui"></div></div>
    <script src="/assets/js/app.2b0e3d52.js" defer></script><script src="/assets/js/2.87232f21.js" defer></script><script src="/assets/js/47.e445b894.js" defer></script>
  </body>
</html>
